package com.sky.context;

// 联系上下文
// 用于存储和传递数据，比如在JWT校验token解析获取用户ID后，可以存储当前登录用户的ID
// 实现原理：
// 在项目中，一个请求会在一个线程中，ThreadLocal ， 在ThreadLocal中可以存储数据，并且不同线程的数据是隔离的。
// 隔离的意思就是，一个线程的数据不会影响其他线程的数据。只能影响当前线程的数据。
// 因此，在JWT获取用户ID后，可以存储在ThreadLocal中，然后其他地方可以通过ThreadLocal获取到用户ID。
// 其他地方：比如Controller层方法，Service层方法，Mapper层方法等。

// ThreadLocal的三个方法：
// set()：用于存储数据。
// get()：用于获取数据。
// remove()：用于移除数据。


// 在这里的话，封装了一个BaseContext类实现对当前线程的处理。
public class BaseContext {

    public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    // 将当前的线程ID设置为当前登录用户的ID
    public static void setCurrentId(Long id) {
        threadLocal.set(id);
    }

    public static Long getCurrentId() {
        return threadLocal.get();
    }

    public static void removeCurrentId() {
        threadLocal.remove();
    }

}
